package CollectionTest;

import java.util.Comparator;
import java.util.TreeSet;

/*
实现comparator接口，自定义一个比较器，调用TreeSet有参构造方法传入比较器，创建TreeSet对象
    最终的结论:
        放到TreeSet或者TreeMap集合key部分的元素要想做到排序，包括两种方式:
            第一种:放在集合中的元素实现java.lang.Comparable接口
            第二种:在构造TreeSet或者TreeMap集合的时候给它传一个比较器对象
    Comparable和Comparator怎么选择？
        当比较规则不会发生改变的时候，或者说当比较规则只有1个的时候，建议实现Comparable接口
        如果比较规则有多个，并且需要多个比较规则之间频繁切换，建议使用Comparator接口
        Comparator接口的设计符合ocp原则
 */
public class TreeSetTest3 {
    public static void main(String[] args){
        //调用TreeSet有参构造方法传入比较器，创建TreeSet对象
        TreeSet<Cat> set = new TreeSet<>(new CatComparator());
        Cat c1 = new Cat("zs");
        Cat c2 = new Cat("ls");
        Cat c3 = new Cat("cc");
        set.add(c1);
        set.add(c2);
        set.add(c3);
        for(Cat c : set){
            System.out.println(c);
        }
    }
}
class Cat{
    private String name;
    public Cat(){

    }
    public Cat(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "姓名:"+this.name;
    }
}
class CatComparator implements Comparator<Cat> {
    @Override
    public int compare(Cat c1, Cat c2) {
        return c1.getName().compareTo(c2.getName());
    }
}
